#include <QtGui>
#include "report.h"

Report::Report(TrayToolKit *mainTtk, ToolParts *mainToolParts, TermsAndMaterials *mainTam, GroupControl *mainGrControl, 
	       QWidget *parent) : QWidget(parent) {

  russianCodec = QTextCodec::codecForName("UTF-8");
  QTextCodec::setCodecForTr(russianCodec);
  QTextCodec::setCodecForCStrings(russianCodec);

  ttk = mainTtk;
  toolParts = mainToolParts;
  tam = mainTam;
  grControl = mainGrControl;

  label = new QLabel("Файл шаблона:", this);
  label->move(10, 30);

  lineEdit = new QLineEdit(this);
  lineEdit->move(10, 50);
  lineEdit->resize(690, 25);

  addShabButton = new QPushButton(this);
  addShabButton->move(705, 50);
  addShabButton->setText("Присоединить шаблон");

  connect(addShabButton, SIGNAL(clicked()), this, SLOT(callFileDialog()));

  genReportButton = new QPushButton(this);
  genReportButton->move(705, 105);
  genReportButton->setText("Сгенерировать отчет");

  connect(genReportButton, SIGNAL(clicked()), this, SLOT(genReport()));

  savePath = "";

} //Report::Report(TrayToolKit *mainTtk, ToolParts *mainToolParts, TermsAndMaterials *mainTam, GroupControl *mainGrControl...

void Report::callFileDialog() {
  
  lineEdit->setText(QFileDialog::getOpenFileName(0, "Открыть шаблон отчета", "/home/multimedia/project/Mantissa/Man", ""));

} //void Report::callFileDialog()

void Report::saveAsXmlPattern() {

  QString saveAsPath = QFileDialog::getSaveFileName(0, "Экспорт в XML", "/home/multimedia/project/Mantissa/Man", "XML файлы (*.xml)");

  if (!saveAsPath.isNull())
    savePath = saveAsPath;

  if (!saveAsPath.isNull())
    genXmlReport();

} //void Report::saveAsXmlPattern()

void Report::genXmlReport() {

  QString nameSaveFile;

  if (savePath == "") {

    nameSaveFile = QFileDialog::getSaveFileName(0, "Экспорт в XML", "/home/multimedia/project/Mantissa/Man", "XML файлы (*.xml)");
    savePath = nameSaveFile;

  } //if (savePath == "")

  else {

    nameSaveFile = savePath;

  } //else: if (savePath == "")

  if (!nameSaveFile.isNull()) {

    QFile saveFile(nameSaveFile);

    if (!saveFile.open(QIODevice::WriteOnly)) {

      emit newMessage("Ошибка записи файла");

    } //if (shabFile.open(QIODevice::ReadOnly))

    QByteArray textShab("");
  
    textShab += genHead().toUtf8();
    textShab += genMain().toUtf8();

    for (int num = 0; num < MAXPARTSITEMS; num++) {

      if (!toolParts->isPartNull(num))
	textShab += genPart(num+1).toUtf8();

    } //for (int num = 0; num <= MAXPARTSITEMS; num++)

    textShab += genTail().toUtf8();

    replaceVar(&textShab);

    if (saveFile.write(textShab) == -1) {

      emit newMessage("Ошибка записи файла");

    } //if (saveFile.write(textShab) == -1)

    else  {

      emit newMessage("Файл успешно сохранен");
      emit resetChanged(false);

    } //else: if (saveFile.write(textShab) == -1)

    saveFile.close();

  } //if (!nameSaveFile.isNull())

} //void Report::genXmlReport()

void Report::loadXmlReport() {

  QString nameLoadFile = QFileDialog::getOpenFileName(0, "Импорт в XML", "/home/multimedia/project/Mantissa/Man", "XML файлы (*.xml)");

  if (!nameLoadFile.isNull()) {

    QFile loadFile(nameLoadFile);

    if (!loadFile.open(QIODevice::ReadOnly)) {

      emit newMessage("Ошибка чтения файла");

    } //if (shabFile.open(QIODevice::ReadOnly))
  
    curPart = 0;

    QXmlInputSource  source(&loadFile);
    QXmlSimpleReader reader;

    reader.setContentHandler(this);

    if (reader.parse(source)) {

      emit newMessage("Файл успешно загружен");
      emit callReCalc();
      emit resetChanged(false);

    } //if (reader.parse(source))
  
    else {

      emit newMessage("Ошибка загрузки файла");

    } //else: if (reader.parse(source))

  } //if (!nameLoadFile.isNull())

} //void Report::loadXmlReport()

bool Report::startElement(const QString &, const QString &, const QString &, const QXmlAttributes & attrs) {

  for (int i = 0; i < attrs.count(); i++) {

    if (attrs.localName(i) == "number") {

      curPart = attrs.value(i).toInt();

    } //if (attrs.localName(i) == "number")

  } //for (int i = 0; i < attrs.count(); i++)

  return true;

} //bool Report::startElement(const QString &, const QString &, const QString & tagNameFull, const QXmlAttributes & attrs)

bool Report::characters(const QString & strText) {

  curTagValue = strText;
  return true;

} //bool Report::characters(const QString & strText)

bool Report::endElement(const QString &, const QString &, const QString & tagNameFull) {

  if (tagNameFull == "b")     	      grControl->setWidth(curTagValue.toDouble());
  if (tagNameFull == "h")     	      grControl->setHeight(curTagValue.toDouble());
  if (tagNameFull == "hr") 	      grControl->setRHeight(curTagValue.toDouble());
  if (tagNameFull == "angle") 	      grControl->setGr(curTagValue.toInt());
  if (tagNameFull == "P") 	      tam->setValueDoubleSpin(curTagValue.toDouble(), EDIT_P);
  if (tagNameFull == "tr") 	      tam->setValueIntSpin(curTagValue.toInt(), EDIT_T);
  if (tagNameFull == "q20") 	      tam->setValueIntSpin(curTagValue.toInt(), EDIT_Q20);
  if (tagNameFull == "region") 	      tam->setValueIntSpin(curTagValue.toInt(), EDIT_REGION);
  if (tagNameFull == "n") 	      tam->setValueDoubleSpin(curTagValue.toDouble(), EDIT_N);
  if (tagNameFull == "concrete")      tam->setConcrete(curTagValue);
  if (tagNameFull == "zmid") 	      tam->setValueDoubleSpin(curTagValue.toDouble(), EDIT_ZMID);
  if (tagNameFull == "L") 	      toolParts->setL(curTagValue.toDouble(), curPart-1); 
  if (tagNameFull == "F") 	      toolParts->setF(curTagValue.toDouble(), curPart-1); 
  if (tagNameFull == "i") 	      toolParts->setI(curTagValue.toDouble(), curPart-1); 
  if (tagNameFull == "ir") 	      toolParts->setIr(curTagValue.toDouble(), curPart-1);

  return true;

} //bool Report::endElement(const QString &, const QString &, const QString & tagNameFull)

bool Report::fatalError(const QXmlParseException & exception) {

  QString error("");

  error += "Message: ";
  error += exception.message(); error += QChar(13);
  error += "Строка: ";
  error += exception.lineNumber(); error += QChar(13);
  error += "Столбец: ";
  error += exception.columnNumber();

  QMessageBox msgBox(QMessageBox::Critical, "Ошибка чтения XML-документа", error, QMessageBox::Ok);
  msgBox.exec();

  return false;

} //bool Report::fatalError(const QXmlParseException & exception)

void Report::saveXmlPattern() {

  QString nameSaveFile = QFileDialog::getSaveFileName(0, "Экспорт шаблона XML", "/home/multimedia/project/Mantissa/Man", 
						      "XML файлы (*.xml)");

  if (!nameSaveFile.isNull()) {

    QFile saveFile(nameSaveFile);

    if (!saveFile.open(QIODevice::WriteOnly)) {

      emit newMessage("Ошибка записи файла");

    } //if (shabFile.open(QIODevice::ReadOnly))

    QByteArray textShab("");
  
    textShab += genHead().toUtf8();
    textShab += genMain().toUtf8();

    for (int num = 0; num < MAXPARTSITEMS; num++) {

      if (!toolParts->isPartNull(num))
	textShab += genPart(num+1).toUtf8();

    } //for (int num = 0; num <= MAXPARTSITEMS; num++)

    textShab += genTail().toUtf8();

    if (saveFile.write(textShab) == -1)
      emit newMessage("Ошибка записи файла");
    else
      emit newMessage("Шаблон успешно сохранен");

    saveFile.close();

  } //if (!nameSaveFile.isNull())

} //void Report::saveXmlPattern()

void Report::genReport() {

  if (lineEdit->text() == "") {

    emit newMessage("Шаблон не присоединен");

  } //if (lineEdit->text() == "")
  
  else {

    QFile shabFile(lineEdit->text());

    if (shabFile.exists()) {

      if (!shabFile.open(QIODevice::ReadOnly)) {

	emit newMessage("Ошибка чтения файла");

      } //if (shabFile.open(QIODevice::ReadOnly))

      QByteArray textShab = shabFile.readAll();

      shabFile.close();

      QString nameSaveFile = QFileDialog::getSaveFileName(0, "Сохранение отчета", "/home/multimedia/project/Mantissa/Man", "");

      if (!nameSaveFile.isNull()) {

	QFile saveFile(nameSaveFile);

	if (!saveFile.open(QIODevice::WriteOnly)) {

	  emit newMessage("Ошибка записи файла");

	} //if (shabFile.open(QIODevice::ReadOnly))

	replaceVar(&textShab);

	if (saveFile.write(textShab) == -1)
	  emit newMessage("Ошибка записи файла");
	else
	  emit newMessage("Отчет успешно сгенерирован");

	saveFile.close();

      } //if (!nameSaveFile.isNull())

    } //if (shabFile.exists())

    else {

      emit newMessage("Файл не существует");

    } //else: if (shabFile.exists())

  } //else: if (lineEdit->text() == "")

} //void Report::genReport()

void Report::replaceVar(QByteArray * fileText) {

  //Сохранение текущуго участка
  int curPart = toolParts->editPart();

  //Список переменных
  QString strVar[51] = { "m",		"Xcr",		"kt",
			 "b",		"Xr",		"kf",
			 "angle",	"R",		"y",
			 "h",		"Rcr",		"a",
			 "hcr",		"Rr",		"g",
			 "hcrf",	"C", 		"P",
			 "hr",		"Ccr",		"tr",
			 "hrain",	"Cr",		"q20",
			 "L",		"A",		"n",
			 "F",		"vs",		"zmid",
			 "i",		"vr",		"region",
			 "icr",		"vd",		"concrete",
			 "ir",		"Q",		"Qcr",
			 "S",		"Qrec",		"Scr",
			 "Sr",		"Qr",		"parts",
			 "X",		"Qrain",	"conditionQ",
			 "conditionV", 	"chuteType",   	"chuteTypeName"
  };

  //Список размерностей в html
  QString strDimHtml[51] = { ttk->getDimVarHtml(VAR_M),
			     ttk->getDimVarHtml(VAR_PERIMETER),
			     ttk->getDimVarHtml(VAR_KPF),
			     ttk->getDimVarHtml(VAR_B),
			     ttk->getDimVarHtml(VAR_PERIMETER),
			     ttk->getDimVarHtml(VAR_KPT),
			     ttk->getDimVarHtml(VAR_ANGLE),
			     ttk->getDimVarHtml(VAR_RADIUS),
			     ttk->getDimVarHtml(VAR_CY),
			     ttk->getDimVarHtml(VAR_H),
			     ttk->getDimVarHtml(VAR_RADIUS),
			     ttk->getDimVarHtml(VAR_A),
			     ttk->getDimVarHtml(VAR_H),
			     ttk->getDimVarHtml(VAR_RADIUS),
			     ttk->getDimVarHtml(VAR_G),
			     ttk->getDimVarHtml(VAR_H),
			     ttk->getDimVarHtml(VAR_SHEZY),
			     ttk->getDimVarHtml(VAR_P),
			     ttk->getDimVarHtml(VAR_H),
			     ttk->getDimVarHtml(VAR_SHEZY),
			     ttk->getDimVarHtml(VAR_TIMERAIN),
			     ttk->getDimVarHtml(VAR_H),
			     ttk->getDimVarHtml(VAR_SHEZY),
			     ttk->getDimVarHtml(VAR_Q20),
			     ttk->getDimVarHtml(VAR_L),
			     ttk->getDimVarHtml(VAR_A),
			     ttk->getDimVarHtml(VAR_N),
			     ttk->getDimVarHtml(VAR_F),
			     ttk->getDimVarHtml(VAR_V),
			     ttk->getDimVarHtml(VAR_ZMID),
			     ttk->getDimVarHtml(VAR_I),
			     ttk->getDimVarHtml(VAR_V),
			     ttk->getDimVarHtml(VAR_EMPTY),
			     ttk->getDimVarHtml(VAR_I),
			     ttk->getDimVarHtml(VAR_V),
			     ttk->getDimVarHtml(VAR_EMPTY),
			     ttk->getDimVarHtml(VAR_I),
			     ttk->getDimVarHtml(VAR_QCON),
			     ttk->getDimVarHtml(VAR_QCON),
			     ttk->getDimVarHtml(VAR_AREA),
			     ttk->getDimVarHtml(VAR_QCON),
			     ttk->getDimVarHtml(VAR_AREA),
			     ttk->getDimVarHtml(VAR_AREA),
			     ttk->getDimVarHtml(VAR_QCON),
			     ttk->getDimVarHtml(VAR_EMPTY),
			     ttk->getDimVarHtml(VAR_PERIMETER),
			     ttk->getDimVarHtml(VAR_QCON),
			     ttk->getDimVarHtml(VAR_EMPTY),
			     ttk->getDimVarHtml(VAR_EMPTY),
			     ttk->getDimVarHtml(VAR_EMPTY),
			     ttk->getDimVarHtml(VAR_EMPTY)
  };

  //Список размерностей в text
  QString strDimText[51] = { ttk->getDimVarText(VAR_M),
			     ttk->getDimVarText(VAR_PERIMETER),
			     ttk->getDimVarText(VAR_KPF),
			     ttk->getDimVarText(VAR_B),
			     ttk->getDimVarText(VAR_PERIMETER),
			     ttk->getDimVarText(VAR_KPT),
			     ttk->getDimVarText(VAR_ANGLE),
			     ttk->getDimVarText(VAR_RADIUS),
			     ttk->getDimVarText(VAR_CY),
			     ttk->getDimVarText(VAR_H),
			     ttk->getDimVarText(VAR_RADIUS),
			     ttk->getDimVarText(VAR_A),
			     ttk->getDimVarText(VAR_H),
			     ttk->getDimVarText(VAR_RADIUS),
			     ttk->getDimVarText(VAR_G),
			     ttk->getDimVarText(VAR_H),
			     ttk->getDimVarText(VAR_SHEZY),
			     ttk->getDimVarText(VAR_P),
			     ttk->getDimVarText(VAR_H),
			     ttk->getDimVarText(VAR_SHEZY),
			     ttk->getDimVarText(VAR_TIMERAIN),
			     ttk->getDimVarText(VAR_H),
			     ttk->getDimVarText(VAR_SHEZY),
			     ttk->getDimVarText(VAR_Q20),
			     ttk->getDimVarText(VAR_L),
			     ttk->getDimVarText(VAR_A),
			     ttk->getDimVarText(VAR_N),
			     ttk->getDimVarText(VAR_F),
			     ttk->getDimVarText(VAR_V),
			     ttk->getDimVarText(VAR_ZMID),
			     ttk->getDimVarText(VAR_I),
			     ttk->getDimVarText(VAR_V),
			     ttk->getDimVarText(VAR_EMPTY),
			     ttk->getDimVarText(VAR_I),
			     ttk->getDimVarText(VAR_V),
			     ttk->getDimVarText(VAR_EMPTY),
			     ttk->getDimVarText(VAR_I),
			     ttk->getDimVarText(VAR_QCON),
			     ttk->getDimVarText(VAR_QCON),
			     ttk->getDimVarText(VAR_AREA),
			     ttk->getDimVarText(VAR_QCON),
			     ttk->getDimVarText(VAR_AREA),
			     ttk->getDimVarText(VAR_AREA),
			     ttk->getDimVarText(VAR_QCON),
			     ttk->getDimVarText(VAR_EMPTY),
			     ttk->getDimVarText(VAR_PERIMETER),
			     ttk->getDimVarText(VAR_QCON),
			     ttk->getDimVarText(VAR_EMPTY),
			     ttk->getDimVarText(VAR_EMPTY),
			     ttk->getDimVarText(VAR_EMPTY),
			     ttk->getDimVarText(VAR_EMPTY)
  };

  //Поле значений переменных по участкам
  QString strVal[MAXPARTSITEMS][51];

  //Заполнения поля переменных
  for (int partNum = 0; partNum < MAXPARTSITEMS; partNum++) {

    toolParts->changeCurPart(partNum);

    strVal[partNum][0]  = QString().setNum( toPrec(ttk->getVar(VAR_M)), 'g', STRPREC);
    strVal[partNum][1]  = QString().setNum( toPrec(ttk->moistenedPerimeter_cr()), 'g', STRPREC);
    strVal[partNum][2]  = QString().setNum( toPrec(ttk->getVar(VAR_KPT)), 'g', STRPREC);			
    strVal[partNum][3]  = QString().setNum( toPrec(ttk->getVar(VAR_B)), 'g', STRPREC);
    strVal[partNum][4]  = QString().setNum( toPrec(ttk->moistenedPerimeter_r()), 'g', STRPREC);		
    strVal[partNum][5]  = QString().setNum( toPrec(ttk->getVar(VAR_KPF)), 'g', STRPREC);
    strVal[partNum][6]  = QString().setNum( to_gr(atan(1/ttk->getVar(VAR_M))) );
    strVal[partNum][7]  = QString().setNum( toPrec(ttk->hydraulicRadius()), 'g', STRPREC);
    strVal[partNum][8]  = QString().setNum( toPrec(ttk->getVar(VAR_CY)), 'g', STRPREC);			
    strVal[partNum][9]  = QString().setNum( toPrec(ttk->getVar(VAR_H)), 'g', STRPREC);
    strVal[partNum][10] = QString().setNum( toPrec(ttk->hydraulicRadius_cr()), 'g', STRPREC);		
    strVal[partNum][11] = QString().setNum( toPrec(ttk->getVar(VAR_A)), 'g', STRPREC);
    strVal[partNum][12] = QString().setNum( toPrec(ttk->crHeightTrapTray()), 'g', STRPREC);		
    strVal[partNum][13] = QString().setNum( toPrec(ttk->hydraulicRadius_r()), 'g', STRPREC);
    strVal[partNum][14] = QString().setNum( toPrec(ttk->getVar(VAR_G)), 'g', STRPREC);			
    strVal[partNum][15] = QString().setNum( toPrec(ttk->crHeightRectTray()), 'g', STRPREC);
    strVal[partNum][16] = QString().setNum( toPrec(ttk->shezy()), 'g', STRPREC);				
    strVal[partNum][17] = QString().setNum( toPrec(ttk->getVar(VAR_P)), 'g', STRPREC);

    strVal[partNum][18] = QString().setNum( toPrec(ttk->getVar(VAR_HR)), 'g', STRPREC);			
    strVal[partNum][19] = QString().setNum( toPrec(ttk->shezy_cr()), 'g', STRPREC);
    strVal[partNum][20] = QString().setNum( ttk->environment(VAR_TIMERAIN) );
    strVal[partNum][21] = QString().setNum( toPrec(ttk->getVar(VAR_HRAIN)), 'g', STRPREC);
    strVal[partNum][22] = QString().setNum( toPrec(ttk->shezy_r()), 'g', STRPREC);			
    strVal[partNum][23] = QString().setNum( toPrec(ttk->getVar(VAR_Q20)), 'g', STRPREC);
    strVal[partNum][24] = QString().setNum( toPrec(toolParts->curL()), 'g', STRPREC);		
    strVal[partNum][25] = QString().setNum( toPrec(ttk->calcAQ()), 'g', STRPREC);
    strVal[partNum][26] = QString().setNum( toPrec(ttk->getVar(VAR_N)), 'g', STRPREC);		
    strVal[partNum][27] = QString().setNum( toPrec(ttk->getVar(VAR_F)), 'g', STRPREC);
    strVal[partNum][28] = QString().setNum( toPrec(ttk->getVar(VAR_VS)), 'g', STRPREC);			
    strVal[partNum][29] = QString().setNum( toPrec(ttk->getVar(VAR_ZMID)), 'g', STRPREC);
    strVal[partNum][30] = QString().setNum( toPrec(ttk->getVar(VAR_I)), 'g', STRPREC);			
    strVal[partNum][31] = QString().setNum( toPrec(ttk->getVar(VAR_VR)), 'g', STRPREC);
    strVal[partNum][32] = QString().setNum( ttk->environment(VAR_REGION) );
    strVal[partNum][33] = QString().setNum( toPrec(ttk->crHydraulicInclination()), 'g', STRPREC);
    strVal[partNum][34] = QString().setNum( toPrec(ttk->getVar(VAR_VD)), 'g', STRPREC);			
    strVal[partNum][35] = tam->textLabel(EDIT_CLCONCRETE);
    // strVal[partNum][35] = QString().setNum( ttk->environment(VAR_CONCRETE) );
    strVal[partNum][36] = QString().setNum( toPrec(ttk->getVar(VAR_IR)), 'g', STRPREC);			
    strVal[partNum][37] = QString().setNum( toPrec(ttk->waterConsumption()), 'g', STRPREC);
    strVal[partNum][38] = QString().setNum( toPrec(ttk->crWaterConsumption()), 'g', STRPREC);		
    strVal[partNum][39] = QString().setNum( toPrec(ttk->areaLiveProfile()), 'g', STRPREC);
    strVal[partNum][40] = QString().setNum( toPrec(ttk->recWaterConsumption()), 'g', STRPREC);	
    strVal[partNum][41] = QString().setNum( toPrec(ttk->areaLiveProfile_cr()), 'g', STRPREC);
    strVal[partNum][42] = QString().setNum( toPrec(ttk->areaLiveProfile_r()), 'g', STRPREC);		
    strVal[partNum][43] = QString().setNum( toPrec(ttk->calcWaterConsumption()), 'g', STRPREC);
    strVal[partNum][44] = QString().setNum( toolParts->partCount() );
    strVal[partNum][45] = QString().setNum( toPrec(ttk->moistenedPerimeter()), 'g', STRPREC);
    strVal[partNum][46] = QString().setNum( toPrec(ttk->rainWaterConsumption()), 'g', STRPREC);		

    if (ttk->calcWaterConsumption() <= ttk->crWaterConsumption()) strVal[partNum][47] = "выполнено";
    else			       				  strVal[partNum][47] = "не выполнено";			       				
    if ((ttk->getVar(VAR_VS) < ttk->getVar(VAR_VR)) && (ttk->getVar(VAR_VR) < ttk->getVar(VAR_VD))) strVal[partNum][48] = "выполнено";
    else		     			  		      	      			    strVal[partNum][48] = "не выполнено";

    if (ttk->type() == SYMTTRAPEZE) {

      strVal[partNum][49] = "1";
      strVal[partNum][50] = "Симметричный трапецеидальный";

    } //if (ttk->type() == SYMTTRAPEZE)

    else if (ttk->type() == ASYMTTRAPEZE) {

      strVal[partNum][49] = "2";
      strVal[partNum][50] = "Асимметричный трапецеидальный";

    } //else if (ttk->type() == ASYMTTRAPEZE)

    else if (ttk->type() == RECTANGLE) {

      strVal[partNum][49] = "3";
      strVal[partNum][50] = "Условно прямоугольный лоток";

    } //else if (ttk->type() == RECTANGLE)

  } //for (int partNum = 0; partNum < MAXPARTSITEMS; partNum++)

  //Текущий номер в строке
  QString prefix("{$");
  QString postfix("}");
  QString sep_num("_");
  QString dim_html("#");
  QString dim_text("%");

  QString var("");
  QString dimHtml("");
  QString dimText("");
  QString num("");


  for (int part = 0; part < MAXPARTSITEMS; part++) {

      num = QString().setNum(part+1);

      for (int numVar = 0; numVar < 51; numVar++) {
      
	var = prefix; var += strVar[numVar]; var += sep_num; var += num; var += postfix;
	dimHtml = prefix; dimHtml += strVar[numVar]; dimHtml += dim_html; dimHtml += postfix;
	dimText = prefix; dimText += strVar[numVar]; dimText += dim_text; dimText += postfix;

	fileText->replace(var.toUtf8(), strVal[part][numVar].toUtf8());
	fileText->replace(dimHtml.toUtf8(), strDimHtml[numVar].toUtf8());
	fileText->replace(dimText.toUtf8(), strDimText[numVar].toUtf8());
      
      } //for (int var = 0; var < 51; var++)

  } //for (int num = 0; num < MAXPARTSITEMS; num++)  

  //Восстановление текущего участка
  toolParts->changeCurPart(curPart);

} //void Report::replaceVar(QByteArray * fileText)

QString Report::genHead() {

  QString str("");

  str += "<?xml version = \"1.0\" encoding=\"UTF-8\"?>"; str += QChar(13);
  str += ""; str += QChar(13);
  str += "<!-- Выгрузка данных для лотка -->"; str += QChar(13);
  str += ""; str += QChar(13);
  str += "<tray>"; str += QChar(13);

  return str;

} //QString Report::genHead()

QString Report::genMain() {

  QString str("");

  str += QChar(13);
  str += "<!-- Переменные не зависящие от участка -->"; str += QChar(13);
  str += "  <main>"; str += QChar(13);
  str += "    <m dimension=\"{$m%}\">{$m_1}</m>"; str += QChar(13);
  str += "    <b dimension=\"{$b%}\">{$b_1}</b>"; str += QChar(13);
  str += "    <angle dimension=\"{$angle%}\">{$angle_1}</angle>"; str += QChar(13);
  str += "    <h dimension=\"{$h%}\">{$h_1}</h>"; str += QChar(13);
  str += "    <hr dimension=\"{$hr%}\">{$hr_1}</hr>"; str += QChar(13);
  str += "    <S dimension=\"{$S%}\">{$S_1}</S>"; str += QChar(13);
  str += "    <Sr dimension=\"{$Sr%}\">{$Sr_1}</Sr>"; str += QChar(13);
  str += "    <X dimension=\"{$X%}\">{$X_1}</X>"; str += QChar(13);
  str += "    <Xr dimension=\"{$Xr%}\">{$Xr_1}</Xr>"; str += QChar(13);
  str += "    <R dimension=\"{$R%}\">{$R_1}</R>"; str += QChar(13);
  str += "    <Rr dimension=\"{$Rr%}\">{$Rr_1}</Rr>"; str += QChar(13);
  str += "    <C dimension=\"{$C%}\">{$C_1}</C>"; str += QChar(13);
  str += "    <Cr dimension=\"{$Cr%}\">{$Cr_1}</Cr>"; str += QChar(13);
  str += "    <A dimension=\"{$A%}\">{$A_1}</A>"; str += QChar(13);
  str += "    <kt dimension=\"{$kt%}\">{$kt_1}</kt>"; str += QChar(13);
  str += "    <kf dimension=\"{$kf%}\">{$kf_1}</kf>"; str += QChar(13);
  str += "    <y dimension=\"{$y%}\">{$y_1}</y>"; str += QChar(13);
  str += "    <a dimension=\"{$a%}\">{$a_1}</a>"; str += QChar(13);
  str += "    <g dimension=\"{$g%}\">{$g_1}</g>"; str += QChar(13);
  str += "    <P dimension=\"{$P%}\">{$P_1}</P>"; str += QChar(13);
  str += "    <tr dimension=\"{$tr%}\">{$tr_1}</tr>"; str += QChar(13);
  str += "    <q20 dimension=\"{$q20%}\">{$q20_1}</q20>"; str += QChar(13);
  str += "    <n dimension=\"{$n%}\">{$n_1}</n>"; str += QChar(13);
  str += "    <zmid dimension=\"{$zmid%}\">{$zmid_1}</zmid>"; str += QChar(13);
  str += "    <vd dimension=\"{$vd%}\">{$vd_1}</vd>"; str += QChar(13);
  str += "    <region>{$region_1}</region>"; str += QChar(13);
  str += "    <concrete>{$concrete_1}</concrete>"; str += QChar(13);
  str += "    <chuteType>{$chuteType_1}</chuteType>"; str += QChar(13);
  str += "    <chuteTypeName>{$chuteTypeName_1}</chuteTypeName>"; str += QChar(13);
  str += "    <parts>{$parts_1}</parts>"; str += QChar(13);
  str += "  </main>"; str += QChar(13);

  return str;

} //QString Report::genMain()

QString Report::genPart(int num) {

  QString str("");

  str += QChar(13);
  str += "<!-- Величины для участка: "; 
  str += QString().setNum(num);
  str += " -->"; str += QChar(13);
  str += "  <part number=\"?\">"; str += QChar(13);
  str += "    <hcr dimension=\"{$hcr%}\">{$hcr_?}</hcr>"; str += QChar(13);
  str += "    <hcrf dimension=\"{$hcrf%}\">{$hcrf_?}</hcrf>"; str += QChar(13);
  str += "    <hrain dimension=\"{$hrain%}\">{$hrain_?}</hrain>"; str += QChar(13);
  str += "    <L dimension=\"{$L%}\">{$L_?}</L>"; str += QChar(13);
  str += "    <F dimension=\"{$F%}\">{$F_?}</F>"; str += QChar(13);
  str += "    <i dimension=\"{$i%}\">{$i_?}</i>"; str += QChar(13);
  str += "    <icr dimension=\"{$icr%}\">{$icr_?}</icr>"; str += QChar(13);
  str += "    <ir dimension=\"{$n%}\">{$ir_?}</ir>"; str += QChar(13);
  str += "    <Scr dimension=\"{$Scr%}\">{$Scr_?}</Scr>"; str += QChar(13);
  str += "    <Xcr dimension=\"{$Xcr%}\">{$Xcr_?}</Xcr>"; str += QChar(13);
  str += "    <Rcr dimension=\"{$Rcr%}\">{$Rcr_?}</Rcr>"; str += QChar(13);
  str += "    <Ccr dimension=\"{$Ccr%}\">{$Ccr_?}</Ccr>"; str += QChar(13);
  str += "    <vs dimension=\"{$vs%}\">{$vs_?}</vs>"; str += QChar(13);
  str += "    <vr dimension=\"{$vr%}\">{$vr_?}</vr>"; str += QChar(13);
  str += "    <Q dimension=\"{$Q%}\">{$Q_?}</Q>"; str += QChar(13);
  str += "    <Qrec dimension=\"{$Qrec%}\">{$Qrec_?}</Qrec>"; str += QChar(13);
  str += "    <Qcr dimension=\"{$Qcr%}\">{$Qcr_?}</Qcr>"; str += QChar(13);
  str += "    <Qr dimension=\"{$Qr%}\">{$Qr_?}</Qr>"; str += QChar(13);
  str += "    <Qrain dimension=\"{$Qrain%}\">{$Qrain_?}</Qrain>"; str += QChar(13);
  str += "    <conditionQ>{$conditionQ_?}</conditionQ>"; str += QChar(13);
  str += "    <conditionV>{$conditionV_?}</conditionV>"; str += QChar(13);
  str += "  </part>"; str += QChar(13);

  str.replace("?", QString().setNum(num));

  return str;

} //QString Report::genPart(int num)

QString Report::saveReport() {

  QString textShab("");

  textShab += genHeadReport();
  textShab += genMainReport();

  for (int num = 0; num < MAXPARTSITEMS; num++) {

    if (!toolParts->isPartNull(num))
      textShab += genPart(num+1).toUtf8();

  } //for (int num = 0; num <= MAXPARTSITEMS; num++)

  textShab += genTailReport();

  QByteArray textByteArr = textShab.toUtf8();
  
  replaceVar(&textByteArr);

  textShab = textByteArr;

  return textShab;

} //QString Report::saveReport()

QString Report::genHeadReport() {
  
  QString str("");

  str += "<html>\n";
  str += "<head>\n";
  str += "   <title>Отчет расчета лотка</title>\n";
  str += "   <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n";
  str += "   <style>\n";
  str += "      p {font-color: #b8b8b8; };\n";
  str += "   </style>\n";
  str += "</head>";
  str += "<body>\n";

  return str;

} //QString Report::genHeadReport()

QString Report::genTailReport() {

  QString str("");

  str += "</body>\n";
  str += "</html>\n";

  return str;

} //QString Report::genTailReport()

QString Report::genMainReport() {

  QString str("");

  str += "<h2><u>Лоток Л-1</u></h2>\n";
  str += "<p align=justify>\n";
  str += "Прокладывается вдоль верхней границы сооружения ПС-1 для перехвата поверхностных вод, движущихся с нагорной стороны.\n";
  str += "Он представляет собой железобетонный лоток длинной {$L_1} {$L#}, армированный сетками из проволоки класса Вр-I и бетона\n";
  str += "класса {$concrete_1}.\n";
  str += "</p>\n";

  str += "<h2><u>Геометрические характеристики лотка</u></h2>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/tray1.png'><br>\n";
  str += "<img align='center' src=':/resources/report_files/tray2.png'><br>\n";
  str += "<img align='center' src=':/resources/report_files/tray3.png'><br>\n";
  str += "</p>\n";

  str += "<p>\n";
  str += "b - ширина трапецеидального лотка по дну, <i>{$b#}</i>, <b>b =</b> {$b_1} <i>{$b#}</i>;<br>\n";
  str += "h - глубина наполнения лотка, <i>{$h#}</i>, <b>h =</b> {$h_1} <i>{$h#}</i>;<br>\n";
  str += "m - коэффициент заложения откоса, <b>m =</b> {$m_1};<br>\n";
  str += "S - площадь живого сечения, <i>{$S#}</i>, <b>S =</b> {$S_1} <i>{$S#}</i>.\n";
  str += "</p>\n";

  str += "<h2><u>Гидравлический расчет 1-го участка лотка Л-1</u></h2>\n";

  str += "<p align=justify>\n";
  str += "Расчет производится в соответствии с <i>приложением 16 СНиП 2.06.03-85</i>.<br>\n";
  str += "Определим глубину наполнения h<sub>cr</sub>.<br>\n";
  str += "Расход воды в лотке Q, <i>{$Q#}</i>, определяется по формуле:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/Q.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "где R - гидравлический радиус, <i>{$R#}</i>, <b>R =</b> {$R_1} <i>{$R#}</i>;<br>\n";
  str += "i - гидравлический уклон, <b>i =</b> {$i_1};<br>\n";
  str += "С - коэффициент Шези, <i>{$C#}</i>.<br>\n";
  str += "Для каналов с гидравлическим радиусом <b>R &#8804</b> 5 <i>{$R#}</i> коэффициент Шези определяется по формуле:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/C.png'><br>\n";
  str += "<img align='center' src=':/resources/report_files/y.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "где n - коэффициент шероховатости, определяемый по <i>приложению 14</i>, <b>n =</b> {$n_1}.<br>\n";
  str += "Отсюда получаем <b>С =</b> {$C_1} <i>{$C#}</i>.<br>\n";
  str += "Расход воды в канале <b>Q =</b> {$Q_1} <i>{$Q#}</i>;<br>\n";
  str += "<br>\n";
  str += "<font color=blue>\n";
  str += "Критическую глубину h<sub>cr</sub>, <i>{$h#}</i>, для каналов трапецеидального сечения следует определять по формуле:\n";
  str += "</font>\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/hcr.png'><br>\n";
  str += "<img align='center' src=':/resources/report_files/k.png'><br>\n";
  str += "<img align='center' src=':/resources/report_files/qn.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "<font color=blue>\n";
  str += "где h<sub>crf</sub> - критическая глубина в условном прямоугольном сечении, ширина по дну которого равна ширине по дну \n";
  str += "рассчитываемого канала трапецеидального сечения, <i>{$h#}</i>;<br>\n";
  str += "</font>\n";
  str += "<br>\n";
  str += "Критическую глубину в условном прямоугольном лотке h<sub>crf</sub> следует определять по формуле:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/hcrf.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "где a - коэффициент, вводимый для учета кинетической энергии и равный 1.1;<br>\n";
  str += "g - ускорение свободного падения, <i>{$g#}</i>.<br>\n";
  str += "Отсюда получаем <b>h<sub>cr</sub> =</b> {$hcr_1} <i>{$h#}</i>.<br>\n";
  str += "Критический уклон i<sub>cr</sub>, следует определять по формуле:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/icr.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "где С<sub>cr</sub> - коэффициент Шези для канала с критической глубиной hcr, \n";
  str += "<b>С<sub>cr</sub> =</b> {$Ccr_1} <i>{$C#}</i>;<br> \n";
  str += "Х<sub>cr</sub> - смоченный периметр лотка при критической глубине, \n";
  str += "<i>{$X#}</i>, <b>Х<sub>cr</sub> =</b> {$Xcr_1} <i>{$X#}</i>;<br>\n";
  str += "В<sub>сr</sub> - ширина канала по урезу воды при критической глубине, <i>{$b#}</i>, \n";
  str += "<b>В<sub>сr</sub> =</b> {$b_1} <i>{$b#}</i>.<br>\n";
  str += "Отсюда получаем <b>i<sub>cr</sub> =</b> {$icr_1}.<br>\n";

  str += "Исходя из полученных значений h<sub>cr</sub> и i<sub>cr</sub>, назначаем значения глубины \n";
  str += "наполнения и уклона дна лотка.<br>\n";

  str += "Допустимая глубина наполнения должна удовлетворять условию <b>h<sub>r</sub> < h<sub>cr</sub></b>\n";
  str += "и согласно <i>п. 2.40</i> для лотков с поперечным сечением трапецеидальной (прямоугольной) формы \n";
  str += "расчетное наполнение надлежит принимать не более 0.7 (0.75) высоты. \n";
  str += "Так как 0.7<b>h =</b> {$hr_1} <i>{$h#}</i> <b>< h<sub>cr</sub> =</b> {$hcr_1} <i>{$h#}</i> и \n";
  str += "околокритический режим работы не допускается, то принимаем <b>h<sub>r</sub> =</b> {$hr_1} <i>{$h#}</i>.<br>\n";
  
  str += "Уклон дна лотка принимаем <b>i<sub>r</sub> =</b> {$ir_1}. \n";

  str += "<font color=blue>\n";
  str += "<ol>\n";
  str += "<li><b>i<sub>r</sub> <</b> 0.002 – не допускается.</li> \n";
  str += "<li>При <b>i<sub>r</sub> > i<sub>cr</sub></b>  водопропускной канал является быстротоком. \n";
  str += "Поэтому в конце участка необходимо устройство водобойного колодца.</li>\n";
  str += "<li>При значительном уклоне местности необходимо устройство системы перепадов.</li>\n";
  str += "</ol>\n";
  str += "</font>\n";

  str += "Максимальный допустимый расход воды в лотке Q<sub>r</sub>, <i>{$Q#}</i>, определяется по формуле:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/Qr.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "где S<sub>r</sub> - площадь живого сечения при максимальном допустимом расходе, <i>{$S#}</i>, \n";
  str += "<b>S<sub>r</sub> =</b> {$Sr_1} <i>{$S#}</i>;<br>\n";
  str += "R<sub>r</sub> –гидравлический радиус при максимальном допустимом расходе, <i>{$R#}</i>, \n";
  str += "<b>R<sub>r</sub> =</b> {$Rr_1} <i>{$R#}</i>;<br>\n";
  str += "С<sub>r</sub> - коэффициент Шези при максимальном допустимом расходе, <i>{$C#}</i>, \n";
  str += "<b>С<sub>r</sub> =</b> {$Cr_1} <i>{$C#}</i>.<br>\n";
  str += "i<sub>r</sub> - расчетный гидравлический уклон, <b>i<sub>r</sub> =</b> {$ir_1};<br>\n";
  str += "Отсюда получаем <b>Q<sub>r</sub> =</b> {$Qr_1} <i>{$Q#}</i>.\n";
  str += "</p>\n";

  str += "<h2><u>Определение расходов дождевых вод</u></h2>\n";

  str += "<p align=justify>\n";
  str += "Расчет производится в соответствии с <i>СНиП 2.04.03-85</i>.<br>\n";
  str += "Расход дождевых вод q, <i>{$Qrain#}</i>, определяем по формуле:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/Qrain.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "где z<sub>mid</sub> - среднее значение коэффициента, характеризующего поверхность бассейна стока, \n";
  str += "определяемое согласно <i>п. 2.17</i>, <b>z<sub>mid</sub> =</b> {$zmid_1};<br>\n";
  str += "F - расчетная площадь стока, <i>{$F#}</i>, определяемая согласно <i>п. 2.14</i>, <b>F =</b> {$F_1} <i>{$F#}</i>;<br>\n";
  str += "К<sub>1</sub> - поправочный коэффициент, определяемый по <i>п. 2.11</i>, <b>К<sub>1</sub> =</b> {$kt_1};<br>\n";
  str += "К<sub>2</sub> - поправочный коэффициент, учитывающий неравномерность выпадения дождя по площади \n";
  str += "определяемый по <i>п. 2.14</i>, <b>К<sub>2</sub> =</b> {$kf_1};<br>\n";
  str += "n - параметр, определяемый согласно по <i>табл. 4</i>, <b>n =</b> {$n_1};<br>\n";
  str += "А - параметр, определяемый согласно <i>п. 2.12</i>;<br>\n";
  str += "t<sub>r</sub> - расчетная продолжительность дождя, <i>{$tr#}</i>, и определяемая согласно <i>п. 2.15</i>, \n";
  str += "принимаем <b>t<sub>r</sub> =</b> {$tr_1} <i>{$tr#}</i>.<br>\n";
  str += "Параметр А при отсутствии данных самопишущих дождемеров допускается определять по формуле:\n";
  str += "</p>";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/A.png'><br>\n";
  str += "</p>";

  str += "<p align=justify>\n";
  str += "где q<sub>20</sub> - интенсивность дождя, <i>{$q20#}</i>, для данной местности продолжительностью 20 <i>мин</i> \n";
  str += "при <b>Р =</b> {$P_1} <i>{$P#}</i>, определяемая по <i>черт. 1</i>, <b>q<sub>20</sub> =</b> {$q20_1} <i>{$q20#}</i>;<br>\n";
  str += "Р - период однократного превышения расчетной интенсивности дождя, принимаемый по <i>п. 2.13</i> и \n";
  str += "<i>п. 3.63 СНиП 2.06.03-85</i>, <b>Р =</b> 5;<br>\n";
  str += "m<sub>r</sub> - средние количество дождей за год, принимаемое по <i>табл. 4</i>, m<sub>r</sub> = 90;<br>\n";
  str += "g - показатель степени, принимаемый по <i>табл. 4</i>, <b>g =</b> {$y_1}.<br>\n";
  str += "Отсюда получаем <b>А =</b> {$A_1}.<br>\n";
  str += "Расходы дождевых вод при водосборе <b>F =</b> {$F_1} <i>{$F#}</i> обеспеченностью 20% составляет:<br>\n";
  str += "<b>q<sub>r</sub> =</b> 0.143 <i>м<sup>3</sup>/с</i>.\n";
  str += "</p>\n";

  str += "<h2><u>Проверка пропускной способности</u></h2>\n";

  str += "<p align=justify>\n";
  str += "Максимальный допустимый расход воды на участке Q<sub>r</sub>, <i>{$Q#}</i>, \n";
  str += "должен быть больше расчетного расхода дождевых вод:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/Qrq.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "{$Qr_1} <i>{$Q#}</i> > {$Qrain_1} <i>{$Q#}</i> – условие {$conditionQ_1}.<br>\n";
  str += "Определим расчетную скорость течения воды ν<sub>р</sub>, <i>{$vr#}</i>, по формуле:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/vr.png'><br>";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "где R<sub>r</sub> – расчетный гидравлический радиус, <i>{$R#}</i>, <b>R<sub>r</sub> =</b> {$Rr_1} <i>{$R#}</i>;<br>\n";
  str += "i<sub>r</sub>  – расчетный гидравлический уклон, <b>i<sub>r</sub> =</b> {$ir_1};<br>\n";
  str += "С<sub>r</sub>  – расчетный коэффициент Шези, <i>{$C#}</i>, \n";
  str += "<b>С<sub>r</sub> =</b> {$Cr_1} <i>{$C#}</i>.<br>\n";
  str += "Отсюда получаем <b>ν<sub>r</sub> =</b> {$vr_1} <i>{$vr#}</i>.<br>\n";
  str += "Расчетная скорость должна быть меньше неразмывающей ν<sub>d</sub>, но больше незаиляющей скорости ν<sub>s</sub>:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/vsvrvd.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "где ν<sub>d</sub> – неразмывающая скорость,<i>{$vr#}</i>, определяемая по <i>приложению 17</i>;<br>\n";
  str += "ν<sub>s</sub> – незаилющая скорость, <i>{$vr#}</i>, вычисляемая по формуле:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/vs.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "{$vs_1} <i>{$vr#}</i> < {$vr_1} <i>{$vr#}</i> < {$vd_1} <i>{$vr#}</i> – условие {$conditionV_1}.<br>\n";
  str += "<br>\n";
  str += "<font color=blue>Величины расчетной скорости больше чем 12 <i>{$vr#}</i> не рекомендуется.</font>\n";
  str += "</p>\n";

  return str;

} //QString Report::genMainReport()

QString Report::genPartReport(int num) {

  QString str("");

  str += "<h2><u>Гидравлический расчет NX-го участка лотка Л-1</u></h2>\n";

  str += "<p align=justify>\n";
  str += "Уклон дна лотка на участке <b>i<sub>rNX</sub> =</b> {$ir_NX}.<br>\n";

  str += "<ol>\n";
  str += "<li>i<sub>rNX</sub> < 0.002 – не допускается.</li> \n";
  str += "<li>При i<sub>rNX</sub> > i<sub>cr</sub>  водопропускной канал является быстротоком. Поэтому в конце участка \n";
  str += "необходимо устройство водобойного колодца.</li>\n";
  str += "<li>При значительном уклоне местности необходимо устройство системы перепадов.</li>\n";
  str += "</ol>\n";

  str += "Максимальный допустимый расход воды на участке Q<sub>rNX</sub>, <i>{$Q#}</i>, определяется по формуле:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/Qr.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "Отсюда получаем <b>Q<sub>rNX</sub> =</b> {$Qr_NX} <i>{$Q#}</i>.\n";
  str += "</p>\n";

  str += "<h2><u>Определение расходов дождевых вод</u></h2>\n";

  str += "<p align=justify>\n";
  str += "Расходы дождевых вод q<sub>NX</sub>, <i>{$Q#}</i>, определятся по формуле:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/Qrain.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "где F<sub>NX</sub> - расчетная площадь стока для данного участка, <i>{$F#}</i>, определяемая \n";
  str += "согласно <i>п. 2.14</i>, <b>F<sub>NX</sub> =</b> {$F_NX} <i>{$F#}</i>;<br>\n";
  str += "Расходы дождевых вод при водосборе <b>F<sub>NX</sub> =</b> {$F_NX} <i>{$F#}</i> обеспеченностью 20% составляет:<br>\n";
  str += "<b>q<sub>NX</sub> =</b> {$Qrain_NX} <i>{$Q#}</i>.\n";
  str += "</p>\n";

  str += "<h2><u>Проверка пропускной способности</u></h2>\n";

  str += "<p align=justify>\n";
  str += "Максимальный допустимый расход воды на участке Q<sub>rNX</sub>, <i>{$Q#}</i>, \n";
  str += "должен быть больше расчетного расхода дождевых вод: \n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/Qrq.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "{$Qr_NX} <i>{$Q#}</i> > {$Qrain_NX} <i>{$Q#}</i> – условие {$conditionQ_NX}.<br>\n";
  str += "Определим расчетную скорость течения воды ν<sub>rNX</sub>, <i>{$vr#}</i>, по формуле: \n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/vr.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "где R<sub>rNX</sub> – расчетный гидравлический радиус на участке, <i>{$R#}</i>, \n";
  str += "<b>R<sub>rNX</sub> =</b> {$Rr_NX} <i>{$R#}</i>;<br>\n";
  str += "С<sub>rNX</sub> - расчетный коэффициент Шези на участке, <i>{$C#}</i>, \n";
  str += "<b>С<sub>rNX</sub> =</b> {$Cr_NX} <i>{$C#}</i>.<br>\n";
  str += "Отсюда получаем <b>ν<sub>rNX</sub>  =</b> {$vr_NX} <i>{$vr#}</i>.<br>\n";
  str += "Расчетная скорость должна быть меньше неразмывающей ν<sub>d</sub>, но больше незаиляющей скорости ν<sub>s</sub>:\n";
  str += "</p>\n";

  str += "<p align='center'>\n";
  str += "<img align='center' src=':/resources/report_files/vsvrvd.png'><br>\n";
  str += "</p>\n";

  str += "<p align=justify>\n";
  str += "{$vs_NX} <i>{$vr#}</i> < {$vr_NX} <i>{$vr#}</i> < {$vd_NX} <i>{$vr#}</i> – условие {$conditionV_NX}.<br> \n";
  str += "<br>\n";
  str += "<font color=blue>Величины расчетной скорости больше чем 12 <i>{$vr#}</i> не рекомендуется.</font>\n";
  str += "</p>\n";

  str.replace("NX", QString().setNum(num));

  return str;									  

} //QString Report::genPartReport(int num)

QString Report::genTail() {

  QString str("");

  str += "</tray>"; str += QChar(13);

  return str;

} //QString Report::genTail()
 
